package com.zl.basic.dao;

import com.zl.basic.model.Pager;

import java.util.List;
import java.util.Map;

/**
 * User: zl email:c3tc3tc3t@126.com Date: 14-1-8 Time: 上午11:59
 * 
 * 公共的dao处理对像，这个对象包含了通过hibernate对数据库的基本操作和通过sql对数据库的操作
 */
public interface IBaseDao<T> {
  /**
   * 添加对象
   * 
   * @param t
   * @return t 返回添加对象
   */
  public T add(T t);

  /**
   * 更新对象
   * 
   * @param t
   * @return
   */
  public void update(T t);

  /**
   * 删除对象
   * 
   * @param id
   * @return
   */
  public void delete(int id);

  /**
   * 根据id查找对象
   * 
   * @param id
   * @return 返回查找的对象
   */
  public T load(int id);

 /* *//**
   * 查询数据返回对象列表，不分页
   *
   * @param hql 查询hql语句
   * @param args 查询参数
   * @return 返回一组对象列表
   *//*
  public List<T> list(String hql, Object[] args);

  public List<T> list(String hql, Object arg);

  public List<T> list(String hql);

  *//**
   * 查询基于别名和查询参数的混合列表对象,不分页
   *
   * @param hql
   * @param args
   * @param alis 别名对象
   * @return
   *//*
  public List<T> list(String hql, Object[] args, Map<String, Object> alis);

  public List<T> listByAlias(String hql, Map<String, Object> alis);

  *//**
   * 查询数据返回对象列表，分页
   *
   * @param hql 查询hql语句
   * @param args 查询参数
   * @return 返回一组对象列表
   *//*
  public Pager<T> find(String hql, Object[] args);

  public Pager<T> find(String hql, Object arg);

  public Pager<T> find(String hql);

  *//**
   * 查询基于别名和查询参数的混合列表对象 ,分页
   *
   * @param hql
   * @param args
   * @param alis 别名对象
   * @return
   *//*
  public Pager<T> find(String hql, Object[] args, Map<String, Object> alis);

  public Pager<T> findByAlias(String hql, Map<String, Object> alis);

  *//**
   * 根据hql查询一个对象
   *
   * @param hql
   * @param args
   * @return
   *//*
  public Object queryObjectByHql(String hql, Object[] args);

  public Object queryObjecByHql(String hql, Object arg);

  public Object queryObjectByHql(String hql);

  public Object queryObjectByHql(String hql, Object[] args, Map<String, Object> alias);

  public Object queryObjectByAliasHql(String hql, Map<String, Object> alias);

  *//**
   * 根据hql更新对象
   *
   * @param hql
   * @param args
   * @return
   *//*
  public void updateByHql(String hql, Object[] args);

  public void updateByHql(String hql, Object arg);

  public void updateByHql(String hql);

  public void updateByHql(String hql, Object[] args, Map<String, Object> alias);

  public void updateByAliasHql(String hql, Map<String, Object> alias);


  *//**
   * 根据sql查询对象,不包含关联对象
   *
   * @param sql 查询的sql语句
   * @param args 查询参数
   * @param clz 查询试实体对象的class
   * @param hasEntity 该对象是否是一个hibernate管理的实体,如果不是使用setResultTransform查询
   * @return 查询得到的一组对象
   *//*
  public <N> List<N> listBySql(String sql, Object[] args, Class<?> clz, boolean hasEntity);

  public <N> List<N> listBySql(String sql, Object arg, Class<?> clz, boolean hasEntity);

  public <N> List<N> listBySql(String sql, Class<?> clz, boolean hasEntity);

  public <N> List<N> listBySql(String sql, Object[] args, Map<String, Object> alias, Class<?> clz,
      boolean hasEntity);

  public <N> List<N> listByAliasSql(String sql, Map<String, Object> alias, Class<?> clz,
      boolean hasEntity);


  *//**
   * 根据sql查询对象,不包含关联对象
   *
   * @param sql 查询的sql语句
   * @param args 查询参数
   * @param clz 查询试实体对象的class
   * @param hasEntity 该对象是否是一个hibernate管理的实体,如果不是使用setResultTransform查询
   * @return 查询得到的一组对象
   *//*
  public <N> Pager<N> findBySql(String sql, Object[] args, Class<?> clz, boolean hasEntity);

  public <N> Pager<N> findBySql(String sql, Object args, Class<?> clz, boolean hasEntity);

  public <N> Pager<N> findBySql(String sql, Class<?> clz, boolean hasEntity);

  public <N> Pager<N> findBySql(String sql, Object[] args, Map<String, Object> alias, Class<?> clz,
      boolean hasEntity);

  public <N> Pager<N> findByAliasSql(String sql, Map<String, Object> alias, Class<?> clz,
      boolean hasEntity);*/



}
